package main

import ()

// interface
// 几乎不需要传递接口类型的指针，接口统一值传递就好了（因为底层都是用指针处理的）
// var _ Tt = (*Tt1)(nil) 接口的静态检查，Tt1是否实现Tt接口
// 方法如果希望实体数据被修改，则用指针方法
// 指针方法，不可以接收值对象（如果编译没出错，则是语法糖的原因）
// 指针方法实现的接口，值对象不具有接口匹配（相较之下，值方法似乎简单了许多）

// slices 和 maps 包含了指向底层数据的指针，因此在需要复制它们时要特别注意
// 这里可以看 在边界处拷贝 Slices 和 Maps，写的很详细

// 积极defer，易读，好用

// channel要么是1，要么是无缓冲

// 枚举从1开始

// time
// 时间比较尽量避免用大小，而用start.Before(now) || start.Equal(now)) 这样的格式（类型为time.Time）
// 使用 time.Duration 表达时间段

// 类型断言 t, ok := i.(string)

// 未导出常量的做法 const _defaultPort = 8080

// nil 是一个有效的 slice，空切片的检查为 len(s) == 0

// 尽量减小变量作用域，如if err := ***; err != nil {/** 这里类似一个函数操作 **/}

// map的初始化必须使用make

func main() {

}
